Geschichte

Diese Amiga-Umsetzung von {\manual META}{\manual FONT} 2.71 basiert zum großen Teil auf dem kompletten TEX- und {\manual META}{\manual FONT}-System von Edmund Mergl, wie es auf den Fish-Disketten 611–616 veröffentlicht wurde. Ausgehend von {\manual META}{\manual FONT} 2.7 aus dieser Implementierung habe ich viele Änderungen und Erweiterungen vorgenommen. Der größte Unterschied zwischen der Version von Edmund Mergl und meiner eigenen ist, daß nun {\manual META}{\manual FONT} für sich allein stehend konzipiert ist, mit völlig selbständigem Quelltext und Hilfsmitteln. (Siehe Abschnitt [*].)

Von Beginn an habe ich auf dem Amiga mit dem {\mc SAS/C}-Entwicklungssystem gearbeitet. Die neueste Version 6.3 dieses großartigen Compilers ist völlig kompatibel mit dem {\mc ANSI}-Standard und hat eine ganze Reihe von Auslassungen bezüglich Stil und Sprache bei dem Versuch festgestellt, den Quelltext neu zu übersetzen. Eine große Aufräumaktion für die Zusatzquellen in {\mc C}, insbesondere die Einführung der vollständigen Prototypen und die Korrektur einiger fehlender Casts, war deshalb notwendig.

Sobald die selbsterzeugte Version 2.7 sauber lief, wurde sie mit der bekannten Amiga-Umsetzung von Stefan Becker von Fish-Diskette 486 verglichen und erwies sich als derart langsamer, daß Verbesserungen notwendig waren, um mit diesem System zu wetteifern. Der kritische Kern der „inneren Schleife`` von {\manual META}{\manual FONT} wurde in Assembler für den Motorola 68020 umgeschrieben. Dies ergab eine Beschleunigung des Laufzeitverhaltens um etwa zwanzig bis dreißig Prozent verglichen mit der nichtoptimierten Version und um etwa fünf bis acht Prozent gegenüber der optimierten Version von Stefan Becker.

Der glänzend bestandene {\mc TRAP}-Test bewies die Korrektheit der gemachten Änderungen dieser Implementierung, wobei die Testroutine von Don Knuth tatsächlich den letzten bösen Fehler meiner eigenen Umsetzung fand (der ausgerechnet etwas mit der Variablen ,be_careful` zu tun hatte). Jedoch zeigte der Augenschein, daß sowohl mein eigenes {\manual META}{\manual FONT} als auch das von Stefan Becker Probleme mit der Bildschirmanzeige hatten. Weder die Implementierung von Stefan Becker noch die von Edmund Mergl arbeiteten so, wie im ,{\manual META}{\manual FONT}book` [4] beschrieben. Besonders die Testroutine 6test.mf für die Computer Modern Zeichensätze machte dies deutlich. (Ein Beispiel für diesen Test findet man auf Seite 192 von [4].) Mit einer geänderten Version von amiga.c, die gleichzeitig einige fortgeschrittene Funktionen für die Ausgabe verwendet und deshalb auch die Version 2 des Amiga Betriebssystems benötigt, lief es besser.

Unter Anwendung einiger Ideen von David Crooke aus seiner Amiga-Umsetzung von TEX 3.141, baute ich eine geänderte Pfadsuche sowie die Möglichkeit der Speicherkonfiguration in {\manual META}{\manual FONT} ein. (Siehe Abschnitt [*] zu Einzelheiten darüber.)

Im September 1993 wurde dann der erste Schritt in Richtung Version 2.71 getan mit Hilfe der Fehlerbeschreibungen des Addison-Wesley-Verlages. Alle Änderungen, die die neue Version betrafen, wurden in die Change-Datei eingebaut.

Schließlich erhielt ich im Oktober 1993 die offizielle Version 2.714, die das alte System vollständig ersetzt. Sie enthält ein neues plain.mf base-Programm und einen völlig neuen {\mc TRAP}-Test. Die letzte große Änderung dieser Implementation war die Bereitstellung einer wirklich {\mc GROSSEN} Version von {\manual META}{\manual FONT} (und von TEX 3.1415), indem max_quarterword auf 32.767 (32 Kilo Viertelworte) und max_halfword auf 1.073.741.823 (1 Giga Halbworte) erweitert wurde, so daß nun wirklich niemand mehr an die maximal mögliche Einstellung stoßen wird (Sie bräuchten schon mehr als 8 Giga Byte freien Speicher!). Dabei scheint jeder zu glauben, daß ,262.142` als maximaler Wert von memmax festgelegt sei, nur weil es so in [3] und [5] angegeben ist. Dieser Wert gilt jedoch nur für 36 Bit Worte. Die vorliegende {\mc C}-Implementation arbeitet aber auf der Basis von „64 Bit Worten``, das heißt ein Halbwort ist als long int definiert, so daß die viel größeren Werte verwendet werden können.